package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * TODO RDD 	小功能：计算所有分区最大值求和（分区内取最大值，分区间最大值求和）
 * 解题思路：
 * 1、使用glom()算子将每一个分区的数据转换成数据集合
 * 2、接着使用map()求出每个区的最大值
 * 3、接着使用sum()进行相加,直接打印就行
 */

object Spark_RDD_Pper_Transform_GlomMax {
  def main(args: Array[String]): Unit = {


    //TODO 1、获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)

    //TODO 3、业务逻辑

    //说明：因为这里是在内存集合中创建的RDD对象又有两个区，所以1，2在0号分区，3，4 在1号分区
    val oldRdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4), 2)
    //3.1
    val arrayRDD: RDD[Array[Int]] = oldRdd.glom()
    val result: Double = arrayRDD.map(
      array => {
        array.max
      }
    ).sum()

    //4、打印
    println(result)
    //TODO 2、关闭连接
    sc.stop()
  }
}